1 /*
2 * Copyright (C) 2011 The Guava Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14
15 package com.google.common.hash;
16
17 import com.google.common.annotations.Beta;
18
19 import java.nio.charset.Charset;
20
21 /**
22 * An object which can receive a stream of primitive values.
23 *
24 * @author Kevin Bourrillion
25 * @since 12.0 (in 11.0 as {@code Sink})
26 */
27 @Beta
28 public interface PrimitiveSink {
29 /**
30 * Puts a byte into this sink.
31 *
32 * @param b a byte
33 * @return this instance
34 */
35 PrimitiveSink putByte(byte b);
36
37 /**
38 * Puts an array of bytes into this sink.
39 *
40 * @param bytes a byte array
41 * @return this instance
42 */
43 PrimitiveSink putBytes(byte[] bytes);
44
45 /**
46 * Puts a chunk of an array of bytes into this sink. {@code bytes[off]} is the first byte written,
47 * {@code bytes[off + len - 1]} is the last.
48 *
49 * @param bytes a byte array
50 * @param off the start offset in the array
51 * @param len the number of bytes to write
52 * @return this instance
53 * @throws IndexOutOfBoundsException if {@code off < 0} or {@code off + len > bytes.length} or
54 * {@code len < 0}
55 */
56 PrimitiveSink putBytes(byte[] bytes, int off, int len);
57
58 /**
59 * Puts a short into this sink.
60 */
61 PrimitiveSink putShort(short s);
62
63 /**
64 * Puts an int into this sink.
65 */
66 PrimitiveSink putInt(int i);
67
68 /**
69 * Puts a long into this sink.
70 */
71 PrimitiveSink putLong(long l);
72
73 /**
74 * Puts a float into this sink.
75 */
76 PrimitiveSink putFloat(float f);
77
78 /**
79 * Puts a double into this sink.
80 */
81 PrimitiveSink putDouble(double d);
82
83 /**
84 * Puts a boolean into this sink.
85 */
86 PrimitiveSink putBoolean(boolean b);
87
88 /**
89 * Puts a character into this sink.
90 */
91 PrimitiveSink putChar(char c);
92
93 /**
94 * Puts each 16-bit code unit from the {@link CharSequence} into this sink.
95 *
96 * @since 15.0 (since 11.0 as putString(CharSequence))
97 */
98 PrimitiveSink putUnencodedChars(CharSequence charSequence);
99
100 /**
101 * Puts a string into this sink using the given charset.
102 */
103 PrimitiveSink putString(CharSequence charSequence, Charset charset);
104 }